import { defineStore } from 'pinia'
import { ref } from 'vue'
import { loginAPI, getCurrentUserAPI, logoutAPI, getUserInfoAPI, updateUserAvatarAPI, updateCurrentUserAPI } from '@/api/userAPI'
import { useRouter } from 'vue-router'

export const useUserStore = defineStore('user', () => {
  const userInfo = ref(JSON.parse(localStorage.getItem('userInfo') || '{}')) // 从本地存储获取用户信息

  /**
   * 登录
   * @param {Object} data - 包含用户名和密码的对象
   * @returns {Promise} - 返回一个Promise对象
   */
  async function login(data) {
    const res = await loginAPI(data)
    userInfo.value = res.data
    localStorage.setItem('userInfo', JSON.stringify(res.data)) // 保存用户信息到本地存储
    return res
  }

  /**
   * 获取当前登录用户信息
   * @returns {Promise} - 返回一个Promise对象
   */
  async function getCurrentUser() {
    const res = await getCurrentUserAPI()
    userInfo.value = res.data
    localStorage.setItem('userInfo', JSON.stringify(res.data)) // 更新本地存储中的用户信息
    return res
  }

  /**
   * 退出登录
   * @returns {Promise} - 返回一个Promise对象
   */
  async function logout() {
    const res = await logoutAPI()
    userInfo.value = {}
    localStorage.removeItem('userInfo') // 清除本地存储中的用户信息
    const router = useRouter()
    router.replace('/login')
    return res
  }

  /**
   * 获取用户信息
   * @returns {Object} - 用户信息对象
   */
  async function getUserInfo(id) {
    const res = await getUserInfoAPI(id)
    userInfo.value = res.data
    localStorage.setItem('userInfo', JSON.stringify(res.data)) // 更新本地存储中的用户信息
    return res.data

  }

  /**
   * 修改个人信息
   * @param {Object} data - 包含用户信息对象的数据
   * @returns {Promise} - 返回一个Promise对象
   */
  async function updateCurrentUser(data) {
    await updateCurrentUserAPI(data).then(() => {
      getCurrentUser()
    })
  }

  /**
   * 更新用户头像
   * @param {File} file - 用户头像文件
   * @returns {Promise} - 返回一个Promise对象
   */
  async function updateUserAvatar(file) {
    updateUserAvatarAPI(file).then(() => {
      getCurrentUser()
    })
  }



  return {
    userInfo,
    login,
    getCurrentUser,
    logout,
    getUserInfo,
    updateCurrentUser,
    updateUserAvatar
  }

})
